"""
工作流模板数据模型

工作流模板是工作流定义的抽象，支持版本管理。
用户从模板创建工作流实例来执行具体任务。
"""
from datetime import datetime, timezone
from zoneinfo import ZoneInfo
from sqlalchemy import Column, Integer, String, Text, DateTime, Boolean, ForeignKey
from database import Base


class WorkflowTemplate(Base):
    """工作流模板表"""
    __tablename__ = "workflow_templates"

    # 基础字段
    id = Column(Integer, primary_key=True, index=True, autoincrement=True)
    name = Column(String(255), nullable=False, index=True)
    description = Column(Text, nullable=True)
    workflow_definition = Column(Text, nullable=False)  # JSON 格式的工作流定义

    # 版本管理字段
    version = Column(Integer, nullable=False, default=1)  # 版本号
    parent_version_id = Column(Integer, ForeignKey("workflow_templates.id"), nullable=True)  # 父版本ID
    change_log = Column(Text, nullable=True, default="初始版本")  # 变更日志

    # 元数据
    status = Column(String(50), nullable=False, default="草稿")  # 模板状态：草稿/已发布/已归档
    created_at = Column(DateTime(timezone=True), nullable=False, default=lambda: datetime.now(ZoneInfo("Asia/Shanghai")))
    updated_at = Column(DateTime(timezone=True), nullable=False, default=lambda: datetime.now(ZoneInfo("Asia/Shanghai")), onupdate=lambda: datetime.now(ZoneInfo("Asia/Shanghai")))
    deleted_at = Column(DateTime(timezone=True), nullable=True)  # 软删除
    created_by = Column(String(100), nullable=True)

    # 兼容字段（迁移期保留，后续版本移除）
    # 注意：定时调度功能已移至 WorkflowInstance
    cron_expression = Column(String(100), nullable=True)  # 废弃字段
    cron_enabled = Column(Boolean, nullable=False, default=False)  # 废弃字段

    def __repr__(self):
        return f"<WorkflowTemplate(id={self.id}, name='{self.name}', version={self.version}, status='{self.status}')>"
